#####################################################################################
#
#   The controller class, the class that runs them all. Loads and sets up ...
#   ... everything then runs the main event loop (Gosu version).
#
#####################################################################################







#####################################################################################
#   The SHOOTINGGAMECONTROLLER class :
#####################################################################################
class ShootingGameController < Gosu::Window

  attr_accessor :screen, :player



  ###################################################################################
  # CREATING a new instance of the class :
  ###################################################################################
  def initialize(w, h, file)




    ### The Gosu part : #############################################################

    ### First, the SCREEN SETUP : ###################################################
    @width  = w
    @height = h

    super(@width, @height, false)                           # Starting in window ...
                                                            # ... mode.
    self.caption = "GosuBulletML"

    ### Second, Loading the images : ###############################################
    playerImage = Gosu::Image.new(self, "../Images/vaisseau.bmp", true)
    sourceImage = Gosu::Image.new(self, "../Images/source.bmp", true)
    bulletImage = Gosu::Image.new(self, "../Images/boulette.bmp", true)

    ### Creating a PLAYER instance : ################################################
    @player             = Player.new(self, @width/2, 4*@height/5, 0.0)

    @player.setImage(playerImage)




    ### The RubyBulletML part : #####################################################

    ### The fixed math initialization : #############################################
    Trigo.initialize

    ### The BULLETML part : #########################################################

    # READING and PARSING the B_ML XML files describing this source's patern :
    @bulletMLSources = [] << BulletML.new(file)

    # ASSIGNING the B_ML objects to b_ml INTERPRETER instances :
    @liveBulletSources = [] << CustomBulletSource.new(self,
                                                      @width/2.0, @height*0.2,
                                                      @bulletMLSources[0])

    @liveBulletSources.last.setImage(sourceImage)
    @liveBulletSources.last.setBulletImage(bulletImage)
    #@liveBulletSources.last.scaling = 2.0

  end



  ###################################################################################
  # Running the EVENT LOOP :
  ###################################################################################
  def update

    # Dealing with keyboard events :
    if button_down? Gosu::Button::KbLeft or button_down? Gosu::Button::GpLeft then
      @player.vx-=@player.s
    end
    if button_down? Gosu::Button::KbRight or button_down? Gosu::Button::GpRight then
      @player.vx+=@player.s
    end
    if button_down? Gosu::Button::KbUp or button_down? Gosu::Button::GpUp then
      @player.vy-=@player.s
    end
    if button_down? Gosu::Button::KbDown or button_down? Gosu::Button::GpDown then
      @player.vy+=@player.s
    end


    # Running all the game's elements behaviors :
    @player.run
    @liveBulletSources.each do |lbs| lbs.run end

  end



  ###################################################################################
  # DRAWING a frame :
  ###################################################################################
  def draw

    @liveBulletSources.each do |lbs| lbs.draw end
    @player.draw

  end



  ###################################################################################
  # EXIT :
  ###################################################################################
  def button_down(id)
    if id == Gosu::Button::KbEscape then
      close
    end
  end


end ### End of the SHOOTINGGAMECONTROLLER class #####################################